package com.szholly.pro.watergas_server.ps.android.common;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

import org.springframework.util.CollectionUtils;

import com.szholly.utils.util.StringUtils;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 生成安卓端请求数据
 * 
 * 常用方法：
 * 
 * List<RowBase> rows = DataUtil.getSelectRows(sql, parms);
 * 
 * return ResultUtils.getToastResult(rows);
 * 
 * 2017/3/23 <br/>
 *
 * @author Joey Huang QQ:273179370）
 */
public class ResultUtils {
	public static final String LOGIN_USER_IS_NOT_EXIST = "用户名不存在";
	public static final String LOGIN_PASSWORD_ERROR = "密码错误";
	public static final String USER_NAME_OR_PASSWORD_NULL = "账号或密码为空";
	public static final String LOGIN_SECURITY_TYPE_IS_NULL = "没有权限";
	public static final String NO_DATA = "没有数据";

	/**
	 * 生成安卓端请求数据,请求失败
	 * 
	 * @param message
	 *            提示信息(成功或者失败等信息)
	 * 
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(String message) {
		return getToastResult(message, false, null, null);
	}

	/**
	 * 生成安卓端请求数据，message：异常日志
	 * 
	 * @param e
	 *            异常
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(Exception e) {
		return getToastResult(null, false, null, e);
	}

	/**
	 * 生成安卓端请求数据，message：异常日志
	 * 
	 * @param e
	 *            异常
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(String message, Exception e) {
		return getToastResult(message, false, null, e);
	}

	/**
	 * 生成安卓端请求数据,请求成功。
	 * 
	 * @param data
	 *            数据 如果为空则请求失败
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(@SuppressWarnings("rawtypes") List data) {
		if (CollectionUtils.isEmpty(data)) {
			return getToastResult(NO_DATA, false, "[]", null);
		} else {
			return getToastResult(null, true, JSONArray.fromObject(data).toString(), null);
		}
	}


	/**
	 * 生成安卓端请求数据,请求成功。
	 * 
	 * @param data
	 *            数据 如果为空则请求失败
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(@SuppressWarnings("rawtypes") Map data) {
		if (CollectionUtils.isEmpty(data)) {
			return getToastResult(NO_DATA, false, "{}", null);
		} else {
			JSONObject dataJson = JSONObject.fromObject(data);
			String dataStr = dataJson.toString();
			return getToastResult(null, true, dataStr, null);
		}
	}

	/**
	 * 生成安卓端请求数据
	 * 
	 * @param message
	 *            提示信息(成功或者失败等信息)
	 * @param isSuccess
	 *            是否成功
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	public static String getToastResult(String message, boolean isSuccess) {
		return getToastResult(message, isSuccess, null, null);
	}


	/**
	 * 生成安卓端请求数据
	 * 
	 * @param message
	 *            提示信息(成功或者失败等信息)
	 * @param isSuccess
	 *            是否成功
	 * @param data
	 *            数据
	 * @param ex
	 *            异常
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	protected static String getToastResult(String message, boolean isSuccess, String data, Exception ex) {
		return getResult(message, isSuccess, data, ex, ResultBean.TOAST);
	}

	/**
	 * 生成安卓端请求数据
	 * 
	 * @param message
	 *            提示信息(成功或者失败等信息)
	 * @param isSuccess
	 *            是否成功
	 * @param data
	 *            数据
	 * @param ex
	 *            异常
	 * @param noticeMethod
	 *            提示方法
	 * @return 格式为 {"code":"", "message":"", "noticeMethod":"", "data":""}
	 *         详情请查看{@link com.szholly.pro.watergas_server.ps.android.common.ResultBean}
	 */
	protected static String getResult(String message, boolean isSuccess, String data, Exception ex, String noticeMethod) {
		// 生成提示信息
		StringBuilder messageBuilder = new StringBuilder();
		if (!StringUtils.IsNullOrSpace(message)) {
			messageBuilder.append(message);
		}
		if (ex != null) {
			if (messageBuilder.length() > 0) {
				messageBuilder.append("\n");
			}
			if (ex instanceof SQLException) {
				messageBuilder.append("数据库查询异常\n");
			}
			messageBuilder.append(ex.getMessage());
		}
		ResultBean resultEntity = new ResultBean();
		resultEntity.setSuccess(isSuccess);
		resultEntity.setMessage(messageBuilder.toString());
		resultEntity.setNoticeMethod(noticeMethod);
		resultEntity.setData(data);
		return resultEntity.toJSONString();
	}
}
